As computing technology has advanced, computers have become increasingly popular for use with a wide variety of applications, including multimedia applications. Multimedia applications offer a wide variety of functionality, including the recording, playback, storage, editing, and so forth of audio and/or video data. Additional hardware is also available for computers, this additional hardware often being designed and/or manufactured by a different person or company than that which designed and/or manufactured the computer. This additional hardware, such as cameras, television capture devices, storage devices, and so forth provides different functionality for applications running on the computer. Furthermore, the same type of hardware (e.g., cameras) designed by different manufacturers may support different functionality.
The computer typically has an architecture that includes a program, referred to as a driver, that runs to allow the multimedia application on the computer to access and use particular hardware. A different driver is typically used for each different piece of hardware. An application running on the computer typically invokes one or more interfaces exposed by an Application Programming Interface (API) on the computer, which interacts with the driver for the particular piece of hardware in order for the commands of the multimedia application to be carried out. Different extensions or plug-ins can be added to the API to support the various functionality of the hardware and drivers. An example of one such API to which extensions can be added is the DirectShow® API available from Microsoft Corporation of Redmond, Wash.
One problem that exists with such architectures, however, arises when changes are made to the API to which the extensions can be added, particularly when significant changes are made to the API. Such changes can result in the situation where the API extensions have to be changed significantly in order to work with the new API. Such changes can require a significant amount of time to make, and may leave the changed API extension unusable with the previous version of the API. Thus, it would be beneficial to have a way to make changes to the API that reduce any necessary changes to the API extensions, and that allow the changed API extensions to be backwards compatible with the previous version of the API.